package cn.tedu.innerclass;
/**
 * 本类用于测试匿名内部类
 * 没有名字，通常结合匿名对象一起使用
 */
public class TestInner5 {
    public static void main(String[] args) {

        //匿名对象
        /**
         * 相当于创建了一个接口的实现类+重写接口中
         * 的所有抽象方法。
         */
        //Inner1 i=new Inner1() {接口的实现内部类
        new Inner1() {//接口的匿名内部实现类
            @Override
            public void get() {
                System.out.println("Inner1接口--get");
            }
            @Override
            public void save() {
                System.out.println("Inner1接口--save");
            }
        }.get();//3.3触发指定的重写后的方法
        //实现类调用方法 i.get();i.save();
        /**
         * 匿名对象只能干一件事，所以只能
         * 调用一个，只能调用一次方法。
         */

        /**
         * 相当于创建了抽象类的子类
         */
        // Inner2 n=new Inner2() {//抽象方法的内部类
        new Inner2() {//抽象方法的匿名内部类

            @Override
            public void eat() {
                System.out.println("吃");
            }
        }.eat();
        //n.play();n.eat();

        //普通类的匿名对象
        /**
         * 没有强制要求普通类重写方法
         * 如果只干一件事，创建匿名对象直接调用
         * 简单，方便。
         */
        new Inner3().hot();
        //如果想要使用同一个对象，做很多事，必须给对象起名字
        //Inner3 i3=new Inner3(); i3.hot(); i3.cold();


    }
}

//1.创建接口Inner1
interface Inner1{
    //2.定义接口中的抽象方法,默认省略public abstract
    void get();
    void save();
}

//4.创建抽象类Inner2
abstract class Inner2{

    public void play(){
        System.out.println("普通方法");
    }
    public abstract void eat();
}

//创建普通类Inner3
class Inner3{
    public void hot(){
        System.out.println("散热");
    }
    public void cold(){
        System.out.println("水冷");
    }
}

















